home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / system / mail / transpor / ifmail23.z / ifmail23 / ifmail / iflib / pktname.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-23  |  3.7 KB  |  193 lines

  1. /* This module hopefully implements BinkleyTerm packet naming conventions */
  2.  
  3. #include <sys/types.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <limits.h>
  8. #include <time.h>
  9. #include "lutil.h"
  10. #include "xutil.h"
  11. #include "ftn.h"
  12. #include "config.h"
  13.  
  14. #ifndef PATH_MAX
  15. #define PATH_MAX 256
  16. #endif
  17. #define ptyp "ut"
  18. #define ftyp "lo"
  19. #define rtyp "req"
  20. #define styp "spl"
  21. #define btyp "bsy"
  22.  
  23. extern unsigned long sequencer(void);
  24.  
  25. static char buf[PATH_MAX];
  26.  
  27. static char *prepbuf(faddr*);
  28. static char *prepbuf(addr)
  29. faddr *addr;
  30. {
  31.     char *p,*domain=NULL;
  32.     char zpref[8];
  33.     fa_list *tmpl;
  34.  
  35.     strcpy(buf,outbound);
  36.  
  37.     if (addr->domain) domain=addr->domain;
  38.     else for (tmpl=nllist;tmpl;tmpl=tmpl->next)
  39.         if (tmpl->addr->zone == addr->zone)
  40.         {
  41.             domain=tmpl->addr->domain;
  42.             break;
  43.         }
  44.     debug(3,"using domain \"%s\" for outbound",domain?domain:"<null>");
  45.     if ((domain != NULL) && (whoami->addr->domain != NULL) &&
  46.         (strcasecmp(domain,whoami->addr->domain) != 0))
  47.     {
  48.         debug(3,"this is not our primary domain");
  49.         if ((p=strrchr(buf,'/'))) p++;
  50.         else p=buf;
  51.         strcpy(p,domain);
  52.         for (;*p;p++) *p=tolower(*p);
  53.         for (tmpl=nllist;tmpl;tmpl=tmpl->next)
  54.             if ((tmpl->addr->domain) &&
  55.                 (strcasecmp(tmpl->addr->domain,domain) == 0))
  56.                 break;
  57.         if (tmpl && (tmpl->addr->zone == addr->zone))
  58.             zpref[0]='\0';
  59.         else sprintf(zpref,".%03x",addr->zone);
  60.     }
  61.     else /* this is our primary domain */
  62.     {
  63.         debug(3,"this is our primary domain");
  64.         if ((addr->zone == 0) || (addr->zone == whoami->addr->zone))
  65.             zpref[0]='\0';
  66.         else sprintf(zpref,".%03x",addr->zone);
  67.     }
  68.  
  69.     p=buf+strlen(buf);
  70.  
  71.     if (addr->point)
  72.         sprintf(p,"%s/%04x%04x.pnt/%08x.",
  73.             zpref,addr->net,addr->node,addr->point);
  74.     else
  75.         sprintf(p,"%s/%04x%04x.",zpref,addr->net,addr->node);
  76.  
  77.     p=buf+strlen(buf);
  78.     return p;
  79. }
  80.  
  81. char *pktname(addr,flavor)
  82. faddr *addr;
  83. char flavor;
  84. {
  85.     char *p;
  86.  
  87.     if (is_local(addr))
  88.     {
  89.         debug(3,"local address, put packet into inbound");
  90.         strncpy(buf,inbound,sizeof(buf)-10);
  91.         sprintf(buf+strlen(buf),"/%08lx.pkt",sequencer());
  92.     }
  93.     else
  94.     {
  95.         p=prepbuf(addr);
  96.         if (flavor == 'f') flavor='o';
  97.         sprintf(p,"%c%s",flavor,ptyp);
  98.     }
  99.     debug(3,"packet name is \"%s\"",buf);
  100.     return buf;
  101. }
  102.  
  103. char *floname(addr,flavor)
  104. faddr *addr;
  105. char flavor;
  106. {
  107.     char *p;
  108.  
  109.     p=prepbuf(addr);
  110.     if (flavor == 'o') flavor='f';
  111.     sprintf(p,"%c%s",flavor,ftyp);
  112.     debug(3,"flo file name is \"%s\"",buf);
  113.     return buf;
  114. }
  115.  
  116. char *reqname(addr,flavor)
  117. faddr *addr;
  118. char flavor;
  119. {
  120.     char *p;
  121.  
  122.     p=prepbuf(addr);
  123.     if (flavor == 'o') flavor='f'; /* in fact this is ignored for reqs */
  124.     sprintf(p,"%s",rtyp);
  125.     debug(3,"req file name is \"%s\"",buf);
  126.     return buf;
  127. }
  128.  
  129. char *splname(addr,flavor)
  130. faddr *addr;
  131. char flavor;
  132. {
  133.     char *p;
  134.  
  135.     p=prepbuf(addr);
  136.     if (flavor == 'o') flavor='f'; /* in fact this is ignored for spls */
  137.     sprintf(p,"%s",styp);
  138.     debug(3,"spl file name is \"%s\"",buf);
  139.     return buf;
  140. }
  141.  
  142. char *bsyname(addr,flavor)
  143. faddr *addr;
  144. char flavor;
  145. {
  146.     char *p;
  147.  
  148.     p=prepbuf(addr);
  149.     if (flavor == 'o') flavor='f'; /* in fact this is ignored for bsys */
  150.     sprintf(p,"%s",btyp);
  151.     debug(3,"bsy file name is \"%s\"",buf);
  152.     return buf;
  153. }
  154.  
  155. static char *dow[] = {"su","mo","tu","we","th","fr","sa"};
  156.  
  157. char *arcname(addr,flavor)
  158. faddr *addr;
  159. char flavor;
  160. {
  161.     char *p;
  162.     char *ext;
  163.     time_t tt;
  164.     struct tm *ptm;
  165.     faddr *bestaka;
  166.  
  167.     (void)time(&tt);
  168.     ptm=localtime(&tt);
  169.     ext=dow[ptm->tm_wday];
  170.  
  171.     bestaka=bestaka_s(addr);
  172.  
  173.     (void)prepbuf(addr);
  174.     p=strrchr(buf,'/');
  175.     if (addr->point)
  176.     {
  177.         sprintf(p,"/%04x%04x.%s0",
  178.             addr->net & 0xffff,
  179.             addr->node & 0xffff,
  180.             ext);
  181.     }
  182.     else
  183.     {
  184.         sprintf(p,"/%04x%04x.%s0",
  185.             ((bestaka->net) - (addr->net)) & 0xffff,
  186.             ((bestaka->node) - (addr->node) +
  187.                 (bestaka->point)) & 0xffff,
  188.             ext);
  189.     }
  190.     debug(3,"arc file name is \"%s\" (flavor '%c' ignored)",buf,flavor);
  191.     return buf;
  192. }
  193.